package com.crx.springbootinit.service;

import com.crx.springbootinit.model.dto.follow.FollowUserPageDTO;
import com.crx.springbootinit.model.dto.follow.FollowOperationDTO;
import com.crx.springbootinit.model.dto.follow.FollowPageDTO;
import com.crx.springbootinit.model.dto.page.PageQuery;
import com.crx.springbootinit.model.dto.page.PageVO;
import com.crx.springbootinit.model.entity.Follow;
import com.baomidou.mybatisplus.extension.service.IService;
import com.crx.springbootinit.model.vo.follow.FollowMeNoticeVO;
import com.crx.springbootinit.model.vo.follow.FollowPageVo;
import com.crx.springbootinit.model.vo.follow.FansVO;
import com.crx.springbootinit.model.vo.follow.FollowVO;

import java.util.List;

/**
 * <p>
 * 关注表 服务类
 * </p>
 *
 * @author author
 * @since 2024-10-21
 */
public interface IFollowService extends IService<Follow> {

    /**
     * 关注或取消关注
     *
     * @param followOperationDTO 关注请求参数
     */
    void followOperation(FollowOperationDTO followOperationDTO);

    /**
     * 分页查询我关注的人列表
     *
     * @return 关注列表
     */
    PageVO<FollowMeNoticeVO> getFollowMeNoticeList(PageQuery pageQuery);

    /**
     * 查询关注数
     *
     * @param token 用户token
     * @return 关注数
     */
    Long getFollowCount(String token);
    Long getFollowCountByUserId(Long token);
    /**
     * 查询粉丝数
     *
     * @param token 用户token
     * @return 粉丝数
     */
    Long getFansCount(String token);
    Long getFansCountByUserId(Long userId);
    /**
     * 查询关注列表
     *
     * @return 关注列表
     */
    PageVO<FollowVO> getFollowPage(PageQuery pageQuery);

    /**
     * 查询粉丝列表
     *
     * @return 粉丝列表
     */
    PageVO<FansVO> getFansPage(PageQuery pageQuery);

    /**
     * 查询我关注的人列表
     *
     * @return 关注列表
     */
    PageVO<FollowPageVo> queryFollowPage(FollowPageDTO followPageDTO);

    Boolean isFollow(Long followId, Long followedId);
}
